昨天解完題後跑測試個案,發現負數的test case都跑不過,會出現這個錯誤:
Line 3: ValueError: invalid literal for int() with base 10: '-'
但我找不出來這行程式哪邊有問題,就在網路上查其他人的解法.
找的時候我看到了這題的一個提示:
负数都不是回文数;
的確,因為輸入的條件是"整數"型態,負數肯定不會是回文數的
所以我在我的code前面加了兩行做判斷,變成這樣:
def isPalindrome(self, x: int) -> bool:
if x < 0 :
return False
inputlist = list(map(int, str(x)))
k = 1
if (len(inputlist) % 2) == 0 :
for i in inputlist:
k += 1
if inputlist[i] != inputlist[-k] :
return False
if i == (len(inputlist) // 2) :
return True
else:
for i in inputlist:
k += 1
if i == (len(inputlist) // 2 + 1) :
return True
if inputlist[i] != inputlist[-k] :
return False
改成這樣之後跑負數的測試個案就正確了!所以我就很放心的submit出去.
然後就遇到了下一個問題
Line 20: IndexError: list index out of range
查到這有兩種可能:
1.list[index]index超出范围
2.list是一个空的 没有一个元素 进行list[0]就会出现该错误
透過測試個案測試確認過,如果是輸入"0"的話就會有這個錯誤
所以我就很笨的再加了兩行把0的狀況判斷出去
def isPalindrome(self, x: int) -> bool:
if x < 0 :
return False
elif x == 0 :
return True
inputlist = list(map(int, str(x)))
k = 1
if (len(inputlist) % 2) == 0 :
for i in inputlist:
k += 1
if inputlist[i] != inputlist[-k] :
return False
if i == (len(inputlist) // 2) :
return True
else:
for i in inputlist:
k += 1
if i == (len(inputlist) // 2 + 1) :
return True
if inputlist[i] != inputlist[-k] :
return False
又臭又長的,submit出去之後還是出現一樣的error...Q.Q
看來一開始想到的解法還是有問題
先沉澱下,明天繼續
9. Palindrome Number [easy] (Python)
IndexError: list index out of range的错误原因